package exercise.jslide.jslide.controller;

import exercise.jslide.jslide.app.AppContext;
import exercise.jslide.jslide.model.Presentation;
import exercise.jslide.jslide.view.MainView;

/**
 * <p>{@code PresentationController}类负责管理应用程序中的演示文稿相关操作。</p>
 * <p>
 *     该类包含了演示文稿对象和主视图对象，
 *     通过这两个对象，该类可以实现演示文稿的新建、打开、保存等操作。
 *     该类还包含了一个{@code FileController}对象，用于处理文件操作。
 * </p>
 * <p>该类的构造方法接收一个{@code Presentation}对象和一个{@code MainView}对象作为参数。</p>
 * <p>该类提供了新建演示文稿、打开演示文稿、保存演示文稿和另存演示文稿等方法。</p>
 */
public class PresentationController {
    private Presentation model;
    private MainView view;
    private FileController fileController;
    private AppContext appContext = AppContext.getInstance();

    /**
     * 该构造方法用于初始化{@code PresentationController}对象。
     * @param presentation 演示文稿对象
     * @param mainView 主视图对象
     */
    public PresentationController(Presentation presentation, MainView mainView) {
        this.model = presentation;
        this.view = mainView;
        this.fileController = new FileController(appContext.getPrimaryStage());
    }

    /**
     * 该方法用于新建一个演示文稿。
     * 该方法会调用{@code AppContext}对象的{@code createNewPresentation}方法，
     * 创建一个新的演示文稿对象，并更新主视图。
     */
    public void newPresentation() {
        appContext.createNewPresentation();
        view.updateView();
    }

    /**
     * 该方法用于打开一个演示文稿。
     * 该方法会调用{@code FileController}对象的{@code openPresentation}方法，
     * 打开一个演示文稿，并更新主视图。
     */
    public void openPresentation() {
        fileController.openPresentation();
        view.updateView();
    }



    public void savePresentation() {
        view.getEditorView().clearSelection();
        fileController.savePresentation();
    }

    public void saveAsPresentation() {
        fileController.saveAsPresentation();
    }

}
